// 利用动态规划进行解题
#include <string>
#include <iostream>
using std::string;


class Solution {
public:
    bool isMatch(string s, string p) {
        bool dp[s.size()+1][p.size()+1];
        // 需要考虑初始化问题
        for (unsigned i = 0; i < s.size()+1; i++) {
            dp[i][0] = (false || i == 0);
            //除了[0][0]，其余全设置为false，因为空模式串不匹配有长度字符串
            for (unsigned j = 1; j < p.size()+1; j++) {
                if (p[j-1] == '*') {
                    if ((i > 0 && j > 1 && this->charMatch(s, p, i-1, j-2)) || (i == 0 && j > 1)) {
                        // 当前字符s[i-1]与p[j-2]匹配的情况下
                        // d[i][j-2]代表匹配长度为0
                        // d[i-1][j]代表匹配长度大于0时
                        // 前i个字符与前j个模式
                        dp[i][j] = (dp[i][j-2] || (i > 0 && dp[i-1][j]));
                    }
                    // 否则代表当前位匹配长度为0，考虑前面的匹配情况
                    else dp[i][j] = (false || (j > 1 && dp[i][j-2]));
                }
                else {
                    if (i > 0 && j > 0 && this->charMatch(s, p, i-1, j-1)) {
                        dp[i][j] = dp[i-1][j-1];
                    }
                    else dp[i][j] = false;
                }
            }
        }
        return dp[s.size()][p.size()];
    }

    bool charMatch(string& s, string& p, unsigned sIdx, unsigned pIdx) {
        return (s[sIdx] == p[pIdx] || p[pIdx] == '.');
    }
};

int main() {
    string s;
    string p;
    std::getline(std::cin, s);
    std::getline(std::cin, p);
    // p = Solution().preprocess(p);
    //std::cout << Solution().isMatch(s, p) << std::endl;
    
    std::cout << Solution().isMatch(s, p) << std::endl;
    return 0;
}